import java.util.Arrays;

public class BestTimeToBuyAndSellStockWithCooldown {
    /**
     * 给定一个整数数组prices，其中第prices[i]表示第i天的股票价格 。
     * 设计一个算法计算出最大利润。在满足以下约束条件下，你可以尽可能地完成更多的交易（多次买卖一支股票）:
     * 卖出股票后，你无法在第二天买入股票 (即冷冻期为 1 天)。
     * 注意：你不能同时参与多笔交易（你必须在再次购买前出售掉之前的股票）。
     * 链接：https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown
     * @param prices
     * @return
     */
    public int maxProfit(int[] prices) {
        Arrays.sort(prices);
        int len =prices.length;
        int[][] f = new int[len][3];
        f[0][0] = 0;
        f[0][1] = f[0][2] = -prices[0];
        for (int i=1;i<prices.length;i++){
            f[i][0] = Math.max(f[i-1][0],f[i][1]+prices[i]);
            f[i][1] = Math.max(f[i-1][1],f[i-1][2]);
            f[i][2] = f[i-1][0] - prices[i];
        }

        return Math.max(f[len-1][0],f[len-1][1]);



    }
}
